package domain.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.StringTokenizer;

import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import net.sf.jsr107cache.Cache;
import net.sf.jsr107cache.CacheException;
import net.sf.jsr107cache.CacheManager;

import domain.data.QnAPersistenceManager;
import domain.model.Domain;
import domain.model.Emails;
import domain.model.InOutLink;
import domain.model.TrackIp;
import domain.model.Whois;
import domain.service.AgeDomain;
import domain.service.AlexaUpdate;
import domain.service.CheckRobotSitemap;
import domain.service.GooglePageRank;
import domain.service.Ip;
import domain.service.SelfSiteUpdate;
import domain.service.Utils;

@SuppressWarnings("serial")
public class DomainDetailServlet extends HttpServlet {
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws IOException {
//		resp.setContentType("text/plain");
//		resp.setCharacterEncoding("utf-8");
		Date date_cache = new Date(new Date().getTime()+60*60*1000);
		
		resp.setHeader( "Cache-Control", "public, max-age=30");
		resp.setHeader( "Expires", date_cache.toGMTString() );
//		PersistenceManager psm = QnAPersistenceManager.get().getPersistenceManager();
//		
//		String showsite = req.getParameter("showsite");
//		Cache cache=null;
//		String path = ((HttpServletRequest)req).getRequestURI();
//		StringTokenizer st = new StringTokenizer( path,"/");
//        int count = st.countTokens(); 
//
//        if(count != 2)
//        {
//        	resp.sendRedirect("/");
//        }
//        
//		// skip one token /question/abcd (remove sites)
//		st.nextToken();
//		
//		String title_url = Utils.fomatDomain(st.nextToken());
//
//		Domain domains = null;
//		try {
//            cache = CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());
//        } catch (CacheException e) {
//           e.printStackTrace();
//           
//        }
//		if(cache.containsKey(title_url))
//		{
//			domains = (Domain) cache.get(title_url);
//		} else {
//			@SuppressWarnings("unchecked")
//			List<Domain> domainList=  (List<Domain>)psm.newQuery(Domain.class,"name == '"+title_url+"'").execute();
//			if(domainList.size()>0)
//			{
//				domains = domainList.get(0);
//
//		        if(!cache.containsKey(title_url))
//		        {
//		        	cache.put(title_url, domains);		        	
//		        }
//			}
//		}
//
//		if(domains!=null)
//		{
//			if(domains.getSex()==9)
//			{
//				resp.sendError(resp.SC_NOT_FOUND,"Content removed because our policy !");
//			} else {
//		        try {
//		            cache = CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());
//		        } catch (CacheException e) {
//		           e.printStackTrace();
//		           
//		        }
//		        if(cache.containsKey("lastPing"))
//		        {
//		        	@SuppressWarnings("unchecked")
//					ArrayList<String> lastPing = (ArrayList<String>)cache.get("lastPing");
//		        	if(lastPing.size()>19)
//		        	{
//		        		lastPing.remove(0);
//		        		
//		        		
//		        	}
//		        	if(!lastPing.contains(domains.getName()))
//		        	lastPing.add(domains.getName());
//		        	cache.put("lastPing", lastPing);
//		        	
//		        }
//		        else
//		        {
//		        	
//		        	ArrayList<String> lastPing = new ArrayList<String>();
//		        	if(!lastPing.contains(domains.getName()))
//		        	lastPing.add(domains.getName());
//		        	cache.put("lastPing", lastPing);
//		        }
//				
//		        if(domains.getGoogleAdsense()!=null&&domains.getGoogleAdsense().trim().length()>0)
//		        {
//		        	Query query8 = psm.newQuery(Domain.class);
//		        	query8.setFilter("googleAdsense == '"+domains.getGoogleAdsense()+"'");
//		        	query8.setRange(0,15);
//		        	@SuppressWarnings("unchecked")
//					List<Domain> sameAds=  (List<Domain>)query8.execute();
//		        	if(sameAds.size() > 0)
//		        	req.setAttribute("sameAds", domain.service.Utils.convert2DomainString( sameAds));
//		        }
//		        
//		        if(domains.getGoogleAnalytic()!=null&&domains.getGoogleAnalytic().trim().length()>0)
//		        {
//		        	Query query9 = psm.newQuery(Domain.class);
//		        	query9.setFilter("googleAnalytic == '"+domains.getGoogleAnalytic()+"'");
//		        	query9.setRange(0,15);
//		        	@SuppressWarnings("unchecked")
//					List<Domain> sameAnalytic=  (List<Domain>)query9.execute();
//		        	if(sameAnalytic.size() > 0)
//		        	req.setAttribute("sameAnalytic", domain.service.Utils.convert2DomainString( sameAnalytic));
//		        }
//				
//		        if(domains.getIp()!=null&&domains.getIp().trim().length()>0)
//		        {
//		        	String[] listIp = domains.getIp().split("\n");
//		        	String sameip = "";
//		        	for(int i=0;i<listIp.length;i++)
//					{
//						PersistenceManager psms = QnAPersistenceManager.get().getPersistenceManager();
//						@SuppressWarnings("unchecked")
//						List<TrackIp> listDomain=  (List<TrackIp>)psms.newQuery(TrackIp.class,"ip == '"+listIp[i]+"'").execute();
//						if(listDomain.size() > 0)
//						{
//							sameip += "<li><div class=\"left detail_left\">"+listIp[i]+"</div><div class=\"left detail_right\">"+listDomain.get(0).getDomainStrings().replaceAll("[ ]+[,]+[ ]+$","")+"</div></li>";
//						}
//					}
//			        req.setAttribute("sameip",sameip);
//		        }
//		        
//				Query query2 = psm.newQuery(InOutLink.class);
//				query2.setFilter("inLink =='"+title_url+"'");
//				query2.setRange(0,5);
//				@SuppressWarnings("unchecked")
//				List<InOutLink> outlink = (List<InOutLink>) query2.execute();
//				req.setAttribute("outlink", outlink);
//				
//				Query query3 = psm.newQuery(InOutLink.class);
//				query3.setFilter("outLink =='"+title_url+"'");
//				query3.setRange(0,5);
//				@SuppressWarnings("unchecked")
//				List<InOutLink> inlink = (List<InOutLink>) query3.execute();
//				req.setAttribute("inlink", inlink);
//				
//				req.setAttribute("domain", domains);
//				
//				Query query4 = psm.newQuery(Whois.class);
//				query4.setFilter("name=='"+title_url+"'");
//				@SuppressWarnings("unchecked")
//				List<Whois> whois = (List<Whois>) query4.execute();
//				req.setAttribute("whois", whois);
//				
//				Query query5 = psm.newQuery(Domain.class);
//				query5.setFilter("domain=='"+Utils.returnDomain(title_url)+"' && name != '"+title_url+"'");
//				query5.setRange(0,30);
//				@SuppressWarnings("unchecked")
//				List<Domain> otherDomain = (List<Domain>) query5.execute();
//				req.setAttribute("otherDomain", otherDomain);
//				
//				if(whois.size() > 0 && whois.get(0).getEmail().size() > 0)
//				{
//					Query query6 = psm.newQuery(Emails.class);
//					String filter = "";
//					for(int i=0;i<whois.get(0).getEmail().size();i++)
//					{
//						if(filter.equals(""))
//							filter = "email=='"+whois.get(0).getEmail().get(i)+"'";
//						else 
//							filter += " || email=='"+whois.get(0).getEmail().get(i)+"'";
//					}
//					query6.setFilter(filter);
//					query6.setRange(0,20);
//					@SuppressWarnings("unchecked")
//					List<Emails> emails = (List<Emails>) query6.execute();
//					req.setAttribute("emails", emails);
//				}
//				if(domains.getSex() == 1)
//				{
//					req.setAttribute("title", domains.getName());
//					req.setAttribute("description", domains.getName()+".A Free SEO tool that provides free website analysis, traffic details, rankings, contact email ,similar site, same owner site , same ip site, optimization and promotion reports.");
//					req.setAttribute("keyword", "Domain name information,  Server information, Web site analysis, website traffic details, Website backlinks website IP, website ranking info");
//				} else {
//					String t = (domains.getTitle()!=null)?domains.getTitle():"";
//					req.setAttribute("title", Utils.returnDomain(title_url)+" "+domains.getName()+ " " +t);
//					String des = (domains.getDescription()!=null)?domains.getDescription().getValue():""+"."+domains.getPopularKeywordToString()+"."+domains.getKeywordToString();
//					if(des.length() > 250)
//					{
//						des = des.substring(0,250);
//					}
//					String key = domains.getName()+","+domains.getPopularKeywordToString()+"."+domains.getKeywordToString()+",Domain name information,  Server information, Web site analysis, website traffic details, Website backlinks website IP, website ranking info";
//					if(key.length() > 250)
//					{
//						key = key.substring(0,250);
//					}
//					req.setAttribute("description", des);
//					req.setAttribute("keyword", key);
//				}
//				try {
//					req.getRequestDispatcher("/detail.jsp").forward(req, resp);
//				} catch (ServletException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//			}
//		} else {
//			if(Utils.checkDomain(title_url))
//			{
//				Domain domain = new Domain();
//				domain.setName(title_url);
//				if(showsite != null && showsite.equals("showsite"))
//				{
//					domain.setShowsite(1);
//				}
//				
//				
//				try {
//					new AgeDomain(domain);
//				} catch (Exception e) {
//					// TODO: handle exception
//				}
//				try {
//					new AlexaUpdate(domain);
//				} catch (Exception e) {
//					// TODO: handle exception
//				}
//				try {
//					new GooglePageRank(domain);
//				} catch (Exception e) {
//					// TODO: handle exception
//				}
//				try {
//					new Ip(domain);
//				} catch (Exception e) {
//					// TODO: handle exception
//				}
//				try {
//					new domain.service.Whois(domain.getName());
//				} catch (Exception e) {
//					// TODO: handle exception
//				}
//				try {
//					new SelfSiteUpdate(domain);
//				} catch (Exception e) {
//					// TODO: handle exception
//				}
//				if(domain.getDescription()!= null && domain.getDescription().getValue().equals("") || domain.getDescription() ==  null)
//			    {
//			    	domain.setName("www."+domain.getName());
//			    	try {
//			    		new SelfSiteUpdate(domain);
//					} catch (Exception e) {
//						// TODO: handle exception
//					}
//				    domain.setName(title_url);
//			    }
//				
//				PersistenceManager psmss = QnAPersistenceManager.get().getPersistenceManager();
//				psmss.currentTransaction().begin();
//				psmss.makePersistent(domain);
//				psmss.currentTransaction().commit();
//
//		        try {
//		            cache = CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());
//		        } catch (CacheException e) {
//		           e.printStackTrace();
//		           
//		        }
//		        
//		        String[] bisi = new String[4];	
//		        bisi[0] = domain.getName();
//		        bisi[1] = domain.getTitle();
//
//		        if(domain.getDescription() != null)
//		        	bisi[2] = domain.getDescription().getValue();
//		        else 
//		        	bisi[2] = domain.getName();
//		        if(domain.getLastUpdateDate() != null)
//	        		bisi[3] = domain.getLastUpdateDate().toGMTString();
//	        	else
//	        		bisi[3] = new Date().toGMTString();
//		        if(cache.containsKey("lastPings"))
//		        {
//		        	@SuppressWarnings("unchecked")
//					ArrayList<String[]> lastPing = (ArrayList<String[]>)cache.get("lastPings");
//		        	if(lastPing.size()>8)
//		        	{
//		        		lastPing.remove(0);
//		        	}
//		        	int check = 0;
//		        	for (int i = 0; i < lastPing.size(); i++) {
//						if(lastPing.get(i)[0] != null && lastPing.get(i)[0].equals(bisi[0]))
//						{
//							check = 1;
//						}
//					}
//		        	if(check == 0)
//		        		lastPing.add(bisi);
//		        		cache.put("lastPings", lastPing);
//		        	
//		        }
//		        else
//		        {
//		        	ArrayList<String[]> lastPing = new ArrayList<String[]>();
//		        	lastPing.add(bisi);
//	        		cache.put("lastPings", lastPing);
//		        }
//				String update = req.getParameter("update");
//				if(update==null)
//					resp.sendRedirect("/domain/"+title_url+"?update=true");
//				else
//					resp.getWriter().println("Domain "+title_url+" does not exit");
//			} else {
//				resp.getWriter().println("Domain "+title_url+" does not exit");
//			}
//		}
	}
}
